package com.tinet.autentia.autentificador;

import java.util.ArrayList;

import javax.persistence.EntityManager;

import com.tinet.autentia.autentificador.model.Usuario;

/**
 * 
 * Clase Interfaz de Usuario Dao.
 * 
 * @author Grupo de la muerte.
 */
public class UsuarioDaoImpl implements UsuarioDao {

    /**
     * Manejador de entidad.
     */
    private EntityManager em;

    /**
     * Constructor que inicializa el manejador de entidad em para cada objeto
     * UsuarioDAO creado.
     * 
     * @param em
     *            Manejador de entidad.
     */
    public UsuarioDaoImpl(EntityManager em) {
        this.em = em;
    }

    /**
     * {@inheritDoc}
     */
    public Usuario buscar(Usuario usuarioABuscar) {
        return (Usuario) em
                .createQuery(
                        "SELECT U FROM Usuario U WHERE U.username=:username")
                .setParameter("username", usuarioABuscar.getUsername())
                .getSingleResult();
    }

    /**
     * {@inheritDoc}
     */
    public void agregar(Usuario nuevoAgregar) {
        em.persist(nuevoAgregar);
    }

    /**
     * {@inheritDoc}
     */
    public void borrar(Usuario usuarioBorrar) {

        em.merge(usuarioBorrar);
    }

    /**
     * {@inheritDoc}
     */
    public void activar(Usuario usuarioActivar) {

        em.merge(usuarioActivar);
    }

    /**
     * {@inheritDoc}
     */
    public void actualizar(Usuario usuarioActualizar) {

        em.merge(usuarioActualizar);
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public ArrayList<Usuario> listar() {
        return (ArrayList<Usuario>) em.createQuery("SELECT U FROM Usuario U")
                .getResultList();
    }

}
